<?php
/**
 * 获取配置的值从数据中获取
 * @param $key : string - 配置标识
 * @param $module : string - 所属模块，默认为当前模块
 * @param $status ：状态
 * @return string 配置的值
 */
function get_config_by_key($key='',$module=BIND_MODULE,$status=1){
    $map=array(
        'module'        =>  $module,
        'key'           =>  $key,
        'status'        =>  $status
        );
    $config=M('Config')->where($map)->find();
    return $config['value'];
}

/**
 * 获取语言列表
 * @return array - 语言列表
 */
function get_langs(){
	$map=array(
		'status'	=>	1
		);
	$languages=M('Language')->order('sort_order asc,language_id asc')->where($map)->select();
	return $languages;
}
// 分析枚举类型配置值 格式 a:名称1,b:名称2
function parse_config_attr($string) {
    $array = preg_split('/[,;\r\n]+/', trim($string, ",;\r\n"));
    if(strpos($string,':')){
        $value  =   array();
        foreach ($array as $val) {
            list($k, $v) = explode(':', $val);
            $value[$k]   = $v;
        }
    }else{
        $value  =   $array;
    }
    return $value;
}


/**
 * 格式化字节大小
 * @param  number $size      字节数
 * @param  string $delimiter 数字和单位分隔符
 * @return string            格式化后的带单位的大小
 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
 */
function format_bytes($size, $delimiter = '') {
    $units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB');
    for ($i = 0; $size >= 1024 && $i < 5; $i++) $size /= 1024;
    return round($size, 2) . $delimiter . $units[$i];
}
/**
 * 获取文件夹的大小
 */
function getDirSize($dir) {   
    $sizeResult=0;
    $handle = opendir($dir);  
    while (false!==($FolderOrFile = readdir($handle))){ 
        if($FolderOrFile != "." && $FolderOrFile != ".."){   
            if(is_dir("$dir/$FolderOrFile")){   
                $sizeResult += getDirSize("$dir/$FolderOrFile");   
            }else{   
                $sizeResult += filesize("$dir/$FolderOrFile");   
            }  
        }      
    }  
    closedir($handle);  
    return $sizeResult;  
}
/**
 * 清空文件夹
 */
function rmdirs($dir){
    $dir_arr = scandir($dir);
    foreach($dir_arr as $key=>$val){
        if($val == '.' || $val == '..'){	
        }else{
            if(is_dir($dir.'/'.$val)){
                if(rmdir($dir.'/'.$val) == 'true'){	
                }else{
                rmdirs($dir.'/'.$val);
            	}                    
            }else{              
            unlink($dir.'/'.$val);
            }  
        }
    }
}

/**
  * 验证电子邮箱地址
*/
function is_email($str){
    $pattern = "/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i";
    return  preg_match( $pattern, $str);
}

/**
 * 生成指定尺寸的缩略图并缓存，要求\Think\Image类
 * @param $filename string 图片址
 * @param $width int 缩略图的宽度
 * @param $height int 缩略图的高度
 * @return string 缩略图地址
 * @author Mortimer He <mortimerhe@gmail.com>
 */
function image_resize($filename='',$width=0,$height=0){
    //如果图片不存在，使用系统图片替代图片位置
    if(!$filename || !is_file(C('IMAGE_DIR') . $filename)){
        if(is_file(C('SYSTEM_IMAGE') . 'image/no_image.png')){
            $width = $width?$width:100;
            $height = $height?$height:100;
            $no_image='cache/no_image-' . $width . 'x' . $height .'.png';
            $Image = new \Think\Image();
            $Image->open(C('SYSTEM_IMAGE') . 'image/no_image.png');
             $Image->thumb($width, $height,\Think\Image::IMAGE_THUMB_FILLED)->save(C('SYSTEM_IMAGE') . $no_image);
             return C('HTTP_IMAGE') . '/system/' . $no_image;
        }else{
            return $filename;
        }
    }
    //如传入正确的参数则生成缩略图，否则返回原图地址
    if($width>0){
        //获取文件的扩展名
        $extension = pathinfo($filename, PATHINFO_EXTENSION);
        $old_image = $filename;
        //新的图片的包含路径的名称
        $new_image = substr($filename, 0, strrpos($filename, '.')) . '-' . $width . 'x' . $height . '.' . $extension;
        //如果缩略图不存在或者缩略图的时间早于原图的时间
        if (!is_file(C('IMAGE_CACHE') . $new_image) || (filectime(C('IMAGE_DIR') . $old_image) > filectime(C('IMAGE_CACHE') . $new_image))) {
                $path = '';

                $directories = explode('/', dirname(str_replace('../', '', $new_image)));                
                foreach ($directories as $directory) {
                    $path = $path . '/' . $directory;

                    if (!is_dir(C('IMAGE_CACHE') . $path)) {
                        @mkdir(C('IMAGE_CACHE') . $path, 0777);
                    }
                }
                list($width_orig, $height_orig) = getimagesize(C('IMAGE_DIR') . $old_image);
                if ($width_orig != $width || $height_orig != $height) {
                    $Image = new \Think\Image();
                    $Image->open(C('IMAGE_DIR') . $old_image);
                    $Image->thumb($width, $height,\Think\Image::IMAGE_THUMB_FILLED)->save(C('IMAGE_CACHE') . $new_image);                   
                } else {
                    copy(C('IMAGE_DIR') . $old_image, C('IMAGE_CACHE') . $new_image);
                }
            }
            return C('HTTP_IMAGE') . '/cache/' . $new_image;
    }else{
        return C('HTTP_IMAGE')  . '/images/' . $filename;
    }
}

/**
 * 生成随机字符串
 * @param $length : int 字符串长度
 * @return string 反回生成的字符串
 * @author Mortimer He <mortimerhe@gmail.com>
 */
function token($length = 32) {
    // Create random token
    $string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    
    $max = strlen($string) - 1;
    
    $token = '';
    
    for ($i = 0; $i < $length; $i++) {
        $token .= $string[mt_rand(0, $max)];
    }   
    
    return $token;
}
/**
 * 文件下载
 * @param $download_id 文件编号
 * @return file 向浏览器发送文件
 * @author Mortimer He <mortimerhe@163.com>
 */
function file_download($download_id){
    $map['download_id']=(int)$download_id;
    $download=M('Download')->where($map)->find();
    if(isset($download['filename'])){
        $file_name=$download['filename'];
        $mask=$download['mask'];
        $file=C('DOWNLOAD_DIR') . $file_name;
        if(is_file($file)){
            $fp=fopen($file,"r"); 
            $file_size=filesize($file); 
            Header("Content-type: application/octet-stream"); 
            Header("Accept-Ranges: bytes"); 
            Header("Accept-Length:".$file_size); 
            Header("Content-Disposition: attachment; filename=".$mask); 
            $buffer=1024; 
            $file_count=0; 
            while(!feof($fp) && $file_count<$file_size){ 
            $file_con=fread($fp,$buffer); 
            $file_count+=$buffer; 
            echo $file_con; 
            } 
            fclose($fp); 
        }
    }else{
        $this->error(L('error_file_not_exist'));
    }
}